<script>
    // 加法操作<"若有一边是字符串类型">，则两边优先转字串类型，就变成了字符串"拼接"操作
    console.log(10 + 20);     // 30
    console.log("10" + 20);   // '1020'  等价于 "10"+String(20)
    console.log("10" + true); // '10true'  等价于 "10"+String(true)
    console.log("10" + null); // 10null  等价于 "10"+String(null)
    console.log(18 + ""); // '18' 等价于 String(18) + ""

    // 若是做 减  乘 除时， 则都统一两边转成数值类型Number再进行计算
    console.log(10 + 20); // 30
    console.log(true + 20);  // 21  等价于 Number(true)+20 = 1 + 20
    console.log(null + 20);  // 20  等价于 Number(null)+20 = 0 + 20 
    console.log(undefined + 20);  // NaN  等价于 Number(undefined)+20 = NaN + 20 = NaN
    console.log(null + true);  // 1  等价于 Number(null)+Number(true) = 0 + 1

    console.log("10b" * 20);   // NaN   Number("10b") * 20 = NaN * 20
    console.log("10" - true);  // 9 Number("10") - Number(true) = 10 - 1
    console.log("20" / "4");   // 5 Number("20") / Number("4") = 20 / 4


    console.log(Number(true)) // 1
    console.log(Number(false)) // 0

    console.log(Number(undefined)) // NaN
    console.log(Number(null)) // 0

    console.log(4 + null) // 4
    console.log(4 + undefined) // NaN

    console.log(undefined + null);
    console.log(true + true);
</script>